package com.ys.nms.module.business.controller.admin.storage.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;

import java.math.BigDecimal;
import java.util.*;
import cn.idev.excel.annotation.*;

@Schema(description = "管理后台 - 存储表 Response VO")
@Data
@ExcelIgnoreUnannotated
public class StorageRespVO {

    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11984")
    @ExcelProperty("ID")
    private Integer storageId;

    @Schema(description = "设备ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6744")
    @ExcelProperty("设备ID")
    private Integer deviceId;

    @Schema(description = "存储信息的 MIB 类型（如 HOST-RESOURCES-MIB	 或 UCD-SNMP-MIB	）", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("存储信息的 MIB 类型（如 HOST-RESOURCES-MIB	 或 UCD-SNMP-MIB	）")
    private String storageMib;

    @Schema(description = "存储在设备中的索引标识（如 SNMP 索引），用于区分不同存储单元。")
    @ExcelProperty("存储在设备中的索引标识（如 SNMP 索引），用于区分不同存储单元。")
    private String storageIndex;

    @Schema(description = "存储类型（如 disk	、memory	、filesystem	）", example = "2")
    @ExcelProperty("存储类型（如 disk	、memory	、filesystem	）")
    private String storageType;

    @Schema(description = "存储的描述信息（如 Hard Disk /dev/sda1 或 Memory Usage）。", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("存储的描述信息（如 Hard Disk /dev/sda1 或 Memory Usage）。")
    private String storageDescr;

    @Schema(description = "存储总容量（单位为 storage_units	 指定的单位，如字节）。", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("存储总容量（单位为 storage_units	 指定的单位，如字节）。")
    private Long storageSize;

    @Schema(description = "存储容量单位（如 1	 表示字节，1024	 表示 KB）。", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("存储容量单位（如 1	 表示字节，1024	 表示 KB）。")
    private Integer storageUnits;

    @Schema(description = "当前已使用的存储容量（单位同上）。", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("当前已使用的存储容量（单位同上）。")
    private Long storageUsed;

    @Schema(description = "当前剩余可用存储容量（单位同上）。", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("当前剩余可用存储容量（单位同上）。")
    private Long storageFree;

    @Schema(description = "存储使用率（百分比，整数形式，如 75	 表示 75%）。", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("存储使用率（百分比，整数形式，如 75	 表示 75%）。")
    private Integer storagePerc;

    @Schema(description = "存储使用率的告警阈值（默认 60%	），超过此值时触发告警。")
    @ExcelProperty("存储使用率的告警阈值（默认 60%	），超过此值时触发告警。")
    private Integer storagePercWarn;

    @Schema(description = "是否标记为删除0	 表示未删除", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("是否标记为删除0	 表示未删除")
    private Boolean storageDeleted;


    // ====== 在 StorageRespVO 中新增以下字段 ======

    @Schema(description = "总容量 (GB)，用于前端展示", example = "3.10")
    private BigDecimal totalGb;

    @Schema(description = "已使用容量 (GB)，用于前端展示", example = "0.01")
    private BigDecimal usedGb;

    @Schema(description = "剩余容量 (GB)，用于前端展示", example = "3.09")
    private BigDecimal freeGb;

    @Schema(description = "使用率（精确到小数点后两位）", example = "0.23")
    private BigDecimal usageRate; // 替代整数的 storagePerc，更精确

}
